#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
const int N = 20;
using namespace std;


int main()
{
  pid_t id = fork();
  if(id == 0)
  {
    // 子进程
    cout<<"子进程开始执行,pid:"<<getpid()<<endl;
    sleep(2);
    // execl("/usr/bin/ls", "ls", "-a", "-l", NULL);
    char* _argvs[N] = 
    {
     (char*) "ls",
     (char*) "-a",
      (char*) "-l",
      NULL
    
    };
    // execv("/usr/bin/ls", _argvs);
    // execlp("ls", "ls", "-a", "-l", NULL);
    // execl("./mycmd", "myproc", "-a", NULL);
    char* _env[N] = 
    {
      (char*)"MY_VAL=123456789",
      NULL
    };
    execle("./mycmd", "myproc", "-b", NULL, _env);
    exit(66);
  }
  else 
  {
    // 父进程
    cout<<"父进程开始执行,pid:"<<getpid()<<endl;
    int status = 0;
    pid_t res = waitpid(-1, &status, 0);    // 阻塞等待，一定是子进程先运行完毕，然后父进程获取之后，才退出
    if(res > 0)
    {
      cout<<"等待子进程成功！退出码是："<<WEXITSTATUS(status)<<endl;
    }
  }
  return 0;
}
